/*
* @Author: obsidian
* @Date:   2016-04-24 14:54:25
* @Last Modified by:   obsidian
* @Last Modified time: 2016-04-24 15:58:33
*/
#include <stdio.h> 
#include <signal.h>     
#include <unistd.h>  
#include <sys/wait.h>
#include <stdlib.h>

int wait_flag; 
void stop(int signum);
int main() 
{
    int pid1, pid2;                         // 定义两个进程号变量  
    wait_flag = 1;
    signal(SIGINT,stop);                         // 或者 signal(14,stop); 
    while(wait_flag == 1);
    while((pid1 = fork()) == -1);      // 若创建子进程1不成功,则空循环
    if(pid1 > 0)
    {                  // 子进程创建成功,pid1为进程号 
        while((pid2 = fork( )) == -1);  // 创建子进程2      
        if(pid2 > 0) 
        { 
            wait_flag = 1; 
            sleep(5);                         // 父进程等待5秒 
            kill(pid1,SIGCHLD);                   // 杀死进程1
            kill(pid2,SIGCHLD);                      // 杀死进程2  
            wait(0);                      // 等待第1个子进程1结束的信号 
            wait(0);                      // 等待第2个子进程2结束的信号 
            printf("\n Parent process is killed !!\n"); 
            exit(0);                                     // 父进程结束 
        } 
        else 
        { 
            wait_flag = 1; 
            signal(SIGCHLD,stop);         // 等待进程2被杀死的中断号17
            while(wait_flag == 1);                                                                                    
            printf("\n Child process 2 is killed by parent !!\n"); 
            exit(0);                                                                                                    
        }                                                                                                                                                                
    }                                                                                                                    
    else 
    {                                                                                                               
        wait_flag = 1;                                                                                                  
        signal(SIGCHLD,stop);                 // 等待进程1被杀死的中断号16    
        while(wait_flag == 1);                                                                                     
        printf("\n Child process 1 is killed by parent !!\n");                                                        
        exit(0); 
    }                                                                                                                    
}   
void stop(int signum) 
{ 
    printf("recv signal %d",signum);
    wait_flag = 0;                                                                                                      
} 
